<?php


namespace EchoPHP\Foundation\Support;


class ParameterBag implements \IteratorAggregate, \Countable {
    /**
     * parameters 集合
     * @var array
     */
    protected $parameters = [];

    public function __construct(array $parameters = []) {
        $this->parameters = $parameters;
    }

    /**
     * 获取全部参数
     * @return array
     */
    public function all() {
        return $this->parameters;
    }

    /**
     * 获取全部参数名
     * @return array
     */
    public function keys() {
        return array_keys($this->parameters);
    }

    /**
     * 重置全部参数
     * @param $parameters
     */
    public function replace(array $parameters = []) {
        $this->parameters = $parameters;
    }

    /**
     * 批量添加参数
     * @param array $parameters
     */
    public function add(array $parameters = []) {
        $this->parameters = array_replace($this->parameters, $parameters);
    }

    /**
     * 获取参数值
     * @param $key 参数名
     * @param null $default 默认值
     * @return mixed|null
     */
    public function get($key, $default = null) {
        return array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default;
    }

    /**
     * 设置参数值
     * @param $key 参数名
     * @param $value 参数值
     */
    public function set($key, $value) {
        $this->parameters[$key] = $value;
    }

    /**
     * 判断是否有设置参数
     * @param $key
     * @return bool
     */
    public function has($key) {
        return array_key_exists($key, $this->parameters);
    }

    /**
     * 删除一个参数
     * @param $key
     */
    public function remove($key) {
        unset($this->parameters[$key]);
    }

    /**
     * 返回一个数组迭代器
     * @return \ArrayIterator|\Traversable
     */
    public function getIterator() {
        return new \ArrayIterator($this->parameters);
    }

    /**
     * 获取参数总数
     * @return int|mixed
     */
    public function count() {
        return $this->count($this->parameters);
    }
}